package com.ys.io.作业;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * 描述: 虚拟化工具类
 *
 * @author CodeYang
 * @version 2020/12/31 10:17
 */
public class SerializableUtils {

    /**
     * 序列化对象到磁盘
     * @param obj 需要序列化的对象
     * @param deskurl 目标路径
     * @param <T>
     * @throws Exception
     */
    public static<T> void serializaObject(T obj,String deskurl) throws Exception{
        // 序列化到磁盘步骤
        //1 : 创建FileOutputStream
        //2 : 创建ObjectOutputStream 来序列化对象
        // try -with - resources 本质是try的一种编译优化技术,只要实现了 closeable接口的类 都可以直接放在()中交给编译器帮我们优化关闭资源
        try ( ObjectOutputStream oos= new ObjectOutputStream(new FileOutputStream(deskurl));){
            // 使用oos 写对象
         oos.writeObject(obj);
        }
    }

    /**
     * 反序列化对象
     * @param srcurl
     * @param <T>
     */
    public static <T> T unserialiObject(String srcurl) throws Exception{
        // 反序列化
        //1 创建ObjectInputStream(FileInputStream)
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(srcurl))) {
            return (T) ois.readObject();
        }

    }
}
